1b6a906aeSopenharmony_cidiff --git a/src/lib_json/json_reader.cpp b/src/lib_json/json_reader.cpp 2b6a906aeSopenharmony_ciindex f233abb..8f4c544 100755 3b6a906aeSopenharmony_ci--- a/src/lib_json/json_reader.cpp 4b6a906aeSopenharmony_ci+++ b/src/lib_json/json_reader.cpp 5b6a906aeSopenharmony_ci@@ -1666,6 +1666,12 @@ bool OurReader::decodeDouble(Token& token, Value& decoded) { 6b6a906aeSopenharmony_ci const String buffer(token.start_, token.end_); 7b6a906aeSopenharmony_ci IStringStream is(buffer); 8b6a906aeSopenharmony_ci if (!(is >> value)) { 9b6a906aeSopenharmony_ci+ // the value could be lower than numeric_limits<double>::min(), in this situtation we should return the value with the gurantee 10b6a906aeSopenharmony_ci+ // of conversion which has been performed and no occurances of range error. 11b6a906aeSopenharmony_ci+ if ((value > 0 && value < std::numeric_limits<double>::min()) || (value < 0 && value > -std::numeric_limits<double>::min())) { 12b6a906aeSopenharmony_ci+ decoded = value; 13b6a906aeSopenharmony_ci+ return true; 14b6a906aeSopenharmony_ci+ } 15b6a906aeSopenharmony_ci return addError( 16b6a906aeSopenharmony_ci "'" + String(token.start_, token.end_) + "' is not a number.", token); 17b6a906aeSopenharmony_ci } 18